<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>layout 管理界面大布局示例 - Layui</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="/layui/css/layui.css" rel="stylesheet">
</head>

<body>
<div class="layui-layout layui-layout-admin">
    <div class="layui-header">
        <div class="layui-logo layui-hide-xs layui-bg-black">2025冬令营平台</div>
        <!-- 头部区域（可配合layui 已有的水平导航） -->
        <ul class="layui-nav layui-layout-left">
            <!-- 移动端显示 -->
            <li class="layui-nav-item layui-show-xs-inline-block layui-hide-sm" lay-header-event="menuLeft">
                <i class="layui-icon layui-icon-spread-left"></i>
            </li>
            <li class="layui-nav-item layui-hide-xs"><a href="javascript:;">日志服务器</a></li>
            <li class="layui-nav-item layui-hide-xs"><a href="javascript:;">灾备服务器</a></li>
            <li class="layui-nav-item layui-hide-xs"><a href="javascript:;">缓冲服务器</a></li>
            <li class="layui-nav-item">
                <a href="javascript:;">切换网络</a>
                <dl class="layui-nav-child">
                    <dd><a href="javascript:;">备用服务器1</a></dd>
                    <dd><a href="javascript:;">备用服务器2</a></dd>
                    <dd><a href="javascript:;">备用服务器3</a></dd>
                </dl>
            </li>
        </ul>
        <ul class="layui-nav layui-layout-right">
            <li class="layui-nav-item layui-hide layui-show-sm-inline-block">
                <a href="javascript:;">
                    <img src="//unpkg.com/outeres@0.0.10/img/layui/icon-v2.png" class="layui-nav-img">
                    tester
                </a>
                <dl class="layui-nav-child">
                    <dd><a href="javascript:;">个人信息</a></dd>
                    <dd><a href="javascript:;">设置</a></dd>
                    <dd><a href="javascript:;">退出</a></dd>
                </dl>
            </li>
            <li class="layui-nav-item" lay-header-event="menuRight" lay-unselect>
                <a href="javascript:;">
                    <i class="layui-icon layui-icon-more-vertical"></i>
                </a>
            </li>
        </ul>
    </div>
    <div class="layui-side layui-bg-black">
        <div class="layui-side-scroll">
            <!-- 左侧导航区域（可配合layui已有的垂直导航） -->
            <ul class="layui-nav layui-nav-tree" lay-filter="test">
                <li class="layui-nav-item layui-nav-itemed">
                    <a class="" href="javascript:;">用户模块</a>
                    <dl class="layui-nav-child">
                        <dd><a href="user.html">用户管理</a></dd>
                        <dd><a href="javascript:;">部门管理</a></dd>
                        <dd><a href="role.html">权限管理</a></dd>
                    </dl>
                </li>
                <li class="layui-nav-item">
                    <a href="javascript:;">数据统计</a>
                    <dl class="layui-nav-child">
                        <dd><a href="javascript:;">临时数据</a></dd>
                        <dd><a href="javascript:;">缓存数据</a></dd>
                        <dd><a href="javascript:;">备份数据</a></dd>
                    </dl>
                </li>
            </ul>
        </div>
    </div>
    <div class="layui-body">
        <!-- 内容主体区域 -->
        <div style="padding: 15px;">
            <!-- 内容主体区域  面包屑-->
            <span class="layui-breadcrumb">
              <a href="/index.html">首页</a>
              <a><cite>用户模块</cite></a>
              <a><cite>用户管理</cite></a>
            </span>

            <!-- 水平线 -->
            <hr class="layui-bg-blue">

            <!-- 搜索条件 -->
            <fieldset class="layui-elem-field">
                <legend>筛选条件</legend>
                <div class="layui-field-box">
                    <div class="layui-form-item layui-form-pane">
                        <label class="layui-form-label">用户名</label>
                        <div class="layui-input-inline">
                            <input type="text" id="search_username" placeholder="请输入用户名" class="layui-input">
                        </div>

                        <label class="layui-form-label">部门</label>
                        <div class="layui-input-inline">
                            <input type="text" id="search_department" placeholder="请输入部门" class="layui-input">
                        </div>
                    </div>

                    <div class="layui-form-item layui-form-pane">
                        <div class="layui-inline">
                            <button class="layui-btn layui-btn-radius layui-btn-warm" id="iReset">重置</button>
                            <button class="layui-btn layui-btn-radius layui-btn-normal" id="searchVal">搜索</button>
                        </div>
                    </div>
                </div>
            </fieldset>

            <table class="layui-hide" id="test" lay-filter="test"></table>

            <script type="text/html" id="toolbarDemo">
                <div class="layui-btn-container">
                    <button class="layui-btn layui-btn-sm" lay-event="getCheckData">获取选中行数据</button>
                    <button class="layui-btn layui-btn-sm" lay-event="getCheckLength">获取选中数目</button>
                    <button class="layui-btn layui-btn-sm" lay-event="isAll">验证是否全选</button>
                    <button class="layui-btn layui-btn-sm" lay-event="insert_user">新增用户</button>
                </div>
            </script>

            <script type="text/html" id="barDemo">
                <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
                <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
            </script>

            <script type="text/html" id="insert_form">
                <div class="layui-field-box">
                    <div class="layui-form-item layui-form-pane">
                        <label class="layui-form-label">用户名</label>
                        <div class="layui-input-inline">
                            <input type="text" id="insert_username" class="layui-input" placeholder="请输入用户名">
                        </div>
                    </div>

                    <div class="layui-form-item layui-form-pane">
                        <label class="layui-form-label">密码</label>
                        <div class="layui-input-inline">
                            <input type="text" id="insert_password" class="layui-input" placeholder="请输入密码">
                        </div>
                    </div>
                </div>
            </script>

            <script type="text/html" id="update_form">
                <div class="layui-field-box">
                    <div class="layui-form-item layui-form-pane">
                        <label class="layui-form-label">用户名</label>
                        <div class="layui-input-inline">
                            <input type="text" id="update_username" class="layui-input" placeholder="请输入用户名">
                        </div>
                    </div>

                    <div class="layui-form-item layui-form-pane">
                        <label class="layui-form-label">密码</label>
                        <div class="layui-input-inline">
                            <input type="text" id="update_password" class="layui-input" placeholder="请输入密码">
                        </div>
                    </div>

                    <form class="layui-form" action="form.html">
                        <div class="layui-form-item layui-form-pane">
                            <label class="layui-form-label">搜索选择框</label>
                            <div class="layui-input-inline">
                                <select name="modules" lay-verify="required" lay-search="" id="select_department">
                                    <option value="">选择部门</option>
                                </select>
                            </div>
                        </div>
                    </form>

                    <div class="layui-form-item layui-form-pane">
                        <label class="layui-form-label">权限</label>
                        <div class="layui-input-inline">
                            <input type="text" id="update_role" class="layui-input" placeholder="请输入密码">
                        </div>
                    </div>
                </div>
            </script>

        </div>
    </div>
    <div class="layui-footer">
        <!-- 底部固定区域 -->
        底部固定区域
    </div>
</div>
</body>

<script src="/layui/layui.js"></script>
<script>
    //JS
    layui.use(['element', 'layer', 'util'], function(){
        var element = layui.element;
        var layer = layui.layer;
        var util = layui.util;
        var $ = layui.$;

        //头部事件
        util.event('lay-header-event', {
            menuLeft: function(othis){ // 左侧菜单事件
                layer.msg('展开左侧菜单的操作', {icon: 0});
            },
            menuRight: function(){  // 右侧菜单事件
                layer.open({
                    type: 1,
                    title: '更多',
                    content: '<div style="padding: 15px;">处理右侧面板的操作</div>',
                    area: ['260px', '100%'],
                    offset: 'rt', // 右上角
                    anim: 'slideLeft', // 从右侧抽屉滑出
                    shadeClose: true,
                    scrollbar: false
                });
            }
        });
    });
</script>
<script src="../jquery/jquery-3.6.0.js"></script>

<script>
    function tableFlush(whereJSON) {
        layui.use('table', function(){
            var table = layui.table;

            table.render({
                elem: '#test'
                ,url:'/user/selectUsers'
                ,where:whereJSON
                ,toolbar: '#toolbarDemo' //开启头部工具栏，并为其绑定左侧模板
                ,defaultToolbar: ['filter', 'exports', 'print', { //自定义头部工具栏右侧图标。如无需自定义，去除该参数即可
                    title: '提示'
                    ,layEvent: 'LAYTABLE_TIPS'
                    ,icon: 'layui-icon-tips'
                }]
                ,title: '用户数据表'
                ,cols: [[
                    {type: 'checkbox', fixed: 'left'}
                    ,{field:'id', title:'ID', width:80, fixed: 'left', unresize: true, sort: true}
                    ,{field:'username', title:'用户名', width:120, unresize: true}
                    ,{title:'部门名称', width:150, unresize: true, templet: function(res){
                            return '<em>'+ res.department.departmentName +'</em>'
                        }}
                    ,{title:'权限级别', width:150, sort: true, unresize: true, templet: function(res){
                            return '<em>'+ res.role.roleName +'</em>'
                        }}
                    ,{field:'joinTime', title:'加入时间', width:120}
                    ,{fixed: 'right', title:'操作', toolbar: '#barDemo', width:150}
                ]]
                ,page: true
            });

            //头工具栏事件
            table.on('toolbar(test)', function(obj){
                var checkStatus = table.checkStatus(obj.config.id);
                switch(obj.event){
                    case 'getCheckData':
                        var data = checkStatus.data;
                        layer.alert(JSON.stringify(data));
                        break;
                    case 'getCheckLength':
                        var data = checkStatus.data;
                        layer.msg('选中了：'+ data.length + ' 个');
                        break;
                    case 'isAll':
                        layer.msg(checkStatus.isAll ? '全选': '未全选');
                        break;
                    case 'insert_user':
                        layer.open({     // 弹出框处理  模态框
                            type: 1               // 模态框
                            ,title: '新增用户' //不显示标题栏
                            ,closeBtn: false
                            ,area: ['500px','500px']  // 宽和高
                            ,shade: 0.5
                            ,id: 'LAY_layuipro' //设定一个id，防止重复弹出
                            ,btn: ['新增', '取消']
                            ,btnAlign: 'c'
                            ,moveType: 1 //拖拽模式，0或者1
                            ,content: $('#insert_form').html()         // 引入自定义表单
                            ,btn1: function(index, layero){            // 这个是新增按钮点击事件
                                // layer.msg("新增按钮执行");
                                let username = $("#insert_username").val();
                                let password = $("#insert_password").val();
                                $.ajax({
                                    url:"/user/insert",           // 请求路径
                                    type:"post",                  // 请求的方式，不区分大小写
                                    cache:false,                  // 关闭缓存，目的是为了避免部分浏览器缓存加载出错(IE)
                                    contentType:"application/json;charset=utf-8",
                                    data: JSON.stringify({
                                        username:username,
                                        password:password
                                    }),
                                    datatype:"json",        // 返回类型，text文本、html页面、json数据
                                    success:function(response){
                                        console.log("返回: " + response);
                                        if(response.code === 200) {
                                            layer.msg("新增用户成功!");
                                            layer.close(index);                         // 关闭当前窗口
                                            tableFlush();
                                        }
                                    },
                                    error:function(response){
                                        console.log("出错返回: " + response);
                                    }
                                });
                            }
                            ,success: function(layero){

                            }
                        });
                        break;

                    //自定义头工具栏右侧图标 - 提示
                    case 'LAYTABLE_TIPS':
                        layer.alert('这是工具栏右侧自定义的一个图标按钮');
                        break;
                };
            });

            //监听行工具事件
            table.on('tool(test)', function(obj){
                var data = obj.data;
                //console.log(obj)
                if(obj.event === 'del'){
                    // alert(data);
                    // alert(JSON.stringify(data));
                    layer.confirm('真的删除行么', function(index){
                        $.ajax({
                            url:"/user/deleteById",           // 请求路径
                            type:"post",                  // 请求的方式，不区分大小写
                            cache:false,                  // 关闭缓存，目的是为了避免部分浏览器缓存加载出错(IE)
                            data: {
                                id:data.id
                            },
                            datatype:"json",        // 返回类型，text文本、html页面、json数据
                            success:function(response){
                                console.log("返回: " + response);
                                if(response.code === 200) {
                                    layer.msg("删除用户成功!");
                                    layer.close(index);                         // 关闭当前窗口
                                    tableFlush();
                                }
                            },
                            error:function(response){
                                console.log("出错返回: " + response);
                            }
                        });
                    });
                } else if(obj.event === 'edit'){
                    layer.open({     // 弹出框处理  模态框
                        type: 1               // 模态框
                        ,title: '更新用户' //不显示标题栏
                        ,closeBtn: false
                        ,area: ['500px','500px']  // 宽和高
                        ,shade: 0.5
                        ,id: 'LAY_layuipro' //设定一个id，防止重复弹出
                        ,btn: ['更新', '取消']
                        ,btnAlign: 'c'
                        ,moveType: 1 //拖拽模式，0或者1
                        ,content: $('#update_form').html()         // 引入自定义表单
                        ,btn1: function(index, layero){            // 这个是新增按钮点击事件
                            // layer.msg("新增按钮执行");
                            let username = $("#update_username").val();
                            let password = $("#update_password").val();
                            let department_id = $("#select_department").val();   // 获取用户在下拉菜单中选中的value值
                            $.ajax({
                                url:"/user/updateById",           // 请求路径
                                type:"post",                  // 请求的方式，不区分大小写
                                cache:false,                  // 关闭缓存，目的是为了避免部分浏览器缓存加载出错(IE)
                                contentType:"application/json;charset=utf-8",
                                data: JSON.stringify({
                                    username:username,
                                    password:password,
                                    department_id:department_id,
                                    id:data.id
                                }),
                                datatype:"json",        // 返回类型，text文本、html页面、json数据
                                success:function(response){
                                    console.log("返回: " + response);
                                    if(response.code === 200) {
                                        layer.msg("更新用户成功!");
                                        layer.close(index);                         // 关闭当前窗口
                                        tableFlush();
                                    }
                                },
                                error:function(response){
                                    console.log("出错返回: " + response);
                                }
                            });
                        }
                        ,success: function(layero){
                            // 此方法是为了我们在弹出窗口之前，初始化数据的
                            $("#update_username").val(data.username);
                            $("#update_password").val(data.password);

                            // let testJSON = [{"id":1, "departmentName":"技术部"},
                            //     {"id":2, "departmentName":"业务部"},
                            //     {"id":3, "departmentName":"市场部"}];

                            for(i = 0; i < JSON_department.length; i++) {
                                let onlyJSON = JSON_department[i];
                                $("#select_department").append("<option value=\"" + onlyJSON.id + "\">"+ onlyJSON.departmentName +"</option>");
                            }
                            // 如果部门名称为null 代表此用户目前没有部门，那么部门选择题，默认在第一行
                            if(data.department.departmentName != null) {
                                $("#select_department").val(data.department.id);
                            }

                            // $("#select_department").append("<option value=\"1\">技术部</option>")
                            //     .append("<option value=\"2\">业务部</option>")
                            //     .append("<option value=\"3\">市场部</option>")

                            layui.use(['form'], function(){
                                var form = layui.form;
                                form.render('select'); // 仅渲染 select 元素
                            });
                        }
                    });
                }
            });
        });
    }
    tableFlush();

</script>
<script>
    let JSON_department = [];   // 读取数据库中所有的部门名称和id
    $.ajax({
        url:"/department/selectAll",           // 请求路径
        type:"get",                  // 请求的方式，不区分大小写
        cache:false,                  // 关闭缓存，目的是为了避免部分浏览器缓存加载出错(IE)
        datatype:"json",        // 返回类型，text文本、html页面、json数据
        success:function(response){
            console.log("返回: " + response);
            if(response.code === 200) {
                // 把所有的部门数据，存放到json中
                JSON_department = response.data;
            }
        },
        error:function(response){
            console.log("出错返回: " + response);
        }
    });
</script>
<script>
    $("#iReset").click(function () {
        // 重置搜索数据
        $("#search_username").val("");
        $("#search_department").val("");
        // 重置表数据
        tableFlush();
    });
    $("#searchVal").click(function () {
        let search_username = $("#search_username").val();
        let search_department = $("#search_department").val();
        let whereJSON = {};
        if(search_username != null && search_username != "") {
            whereJSON.username = search_username;                   //  whereJSON.username  这里的username是一个动态追加的属性名称  这是前端js独有的功能
        }
        if(search_department != null && search_department != "") {
            whereJSON.department_id = search_department;
        }
        tableFlush(whereJSON);
    });
</script>

</html>